<?php

// use Illuminate\Support\Facades\Schema;
use Jialeo\LaravelSchemaExtend\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class InitCoupon extends Migration
{
/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('coupons', function (Blueprint $table) {
            $table->comment = '优惠券表';
            
            $table->increments('id');
            $table->uuid('uuid')->index() ;

            $table->string('code', 15)->index()->comment('兑换码');

            $table->string('title', 100)->nullable()->comment('标题');
            $table->string('sub_title', 100)->nullable()->comment('副标题');

            $table->string('thumb', 256)->nullable()->comment('封面');
            $table->integer('shop_id')->unsigned()->index()->nullable()->comment('店铺id');

            $table->text('description')->nullable()->comment('描述');

            // 领取人群
            $table->integer('user_group_id')->nullable()->index()->comment('使用人群，空则不限制');      // 使用人群，空则不限制

            // 发放方式
            $table->tinyInteger('transfer_type')->default(0)->index()->comment('0为用户领取， 1为自动发放');    // 0为用户领取， 1为自动发放 


            // 可用商品范围
            $table->tinyInteger('usable_range_type')->default(0)->index()->comment('0全场通用  1为指定盲盒  2为指定商品 3为指定vip会员');   // 0为全场通用  1为分类限制   2为商品限制
            $table->text('usable_ids')->nullable()->comment('可用商品或分类id数组');   // 0为全场通用  1为分类限制   2为商品限制
            // $table->tinyInteger('unusable_ids')->nullable();   // 0为全场通用  1为分类限制   2为商品限制


            // 使用门槛
            $table->tinyInteger('money_limit_type')->default(0)->index()->comment('0为无金额限制    1为限制金额');    // 0为无金额限制    1为限制金额
            $table->integer('minimum_money')->nullable()->comment('最小可用订单金额');

            // 优惠方式
            $table->tinyInteger('discount_type')->default(0)->index()->comment('0为现金券   1为打折券  2为包邮券  3为兑换券');    // 0为减现金   1为打折
            $table->integer('discount_money')->nullable()->comment('减少现金');            // 减少现金
            $table->tinyInteger('discount_rate')->nullable()->comment('折扣，1到99');             // 折扣，1到99
            $table->integer('discount_money_limit')->nullable()->comment('折扣券最大可抵扣金额'); // 折扣券最大可抵扣金额

            // 领取后使用时间
            $table->tinyInteger('time_limit_type')->default(0)->index()->comment('0为固定时间   1为领取后固定时间内');    // 0为固定时间   1为领取后固定时间内
            $table->tinyInteger('valid_time')->nullable()->comment('领取后有效时间 小时');      // 领取后有效时间 小时
            $table->timestamp('usable_start_at')->nullable()->comment('固定开始时间');      // 固定开始时间
            $table->timestamp('usable_end_at')->nullable()->comment('固定结束时间');      // 固定结束时间

            // 基本信息
            // $table->integer('total')->unsigned()->comment('总数');     // 总数
            // $table->integer('transfered_total')->unsigned()->default(0)->comment('已发送总量');  // 已发送总量
            $table->integer('used_total')->unsigned()->default(0)->comment('已被使用的');  // 已被使用的

            $table->boolean('is_limit_first_order')->default(0)->comment('首单可用');

            $table->tinyInteger('usable_per_user')->default(1)->comment('每个用户可领数量');

            $table->tinyInteger('status')->default(1)->index()->comment('1为正常 0为下架');

            $table->softDeletes();
            $table->timestamps();

        });

        Schema::create('coupon_user', function (Blueprint $table) {
            $table->comment = '用户领取的优惠券表';
            
            $table->increments('id');
            $table->uuid('uuid')->index();

            $table->integer('coupon_id')->unsigned()->index()->comment('优惠券id');
            $table->integer('user_id')->unsigned()->index()->comment('用户id');

            $table->integer('order_id')->unsigned()->index()->nullable()->comment('已用订单id');

            $table->timestamp('used_at')->nullable()->index()->comment('使用日期');

            $table->timestamp('usable_start_at')->nullable()->index()->comment('可用开始时间');
            $table->timestamp('usable_end_at')->nullable()->index()->comment('可用结束时间');

            // $table->primary(['user_id', 'coupon_id']);

            $table->softDeletes();
            $table->timestamps();
        });

        Schema::create('coupon_usable_relations', function (Blueprint $table) {
            $table->comment = '优惠券可用范围表';
            
            $table->increments('id');
            $table->uuid('uuid')->index();

            $table->integer('coupon_id')->unsigned()->index()->comment('优惠券id');
            $table->integer('target_id')->unsigned()->index()->comment('目标id');
            $table->string('target_type', 10)->index()->comment('目标表类型');
            $table->boolean('type')->default(1)->index()->comment('1为可用 0为不可用');   // 可用

            // $table->primary(['user_id', 'coupon_id']);

            $table->softDeletes();
            $table->timestamps();
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::disableForeignKeyConstraints();
        Schema::dropIfExists('coupons');
        Schema::dropIfExists('coupon_user');
        Schema::dropIfExists('coupon_usable_relations');
    }
}
